package showtime.framework.utils
{
	/**
	 * @project showtime
	 * @date 2011-8-10
	 * @author 绿豆蛙
	 * 
	 */
	public class PageProxy
	{
		private var _source:Array = null;
		
		private var _pageSize:int = 0;
		/**
		 * 当前集合页数游标。 
		 */		
		private var _pageIndex:int = 0;
		
		/**
		 * 构造函数。
		 *  
		 * @param source
		 * @param pageSize
		 * 
		 */		
		public function PageProxy(source:Array, pageSize:int)
		{
			_source = source;
			_pageIndex = 1;
			_pageSize = pageSize;
			
		}
		
		/**
		 * 下一页。 
		 * @return 
		 * 
		 */		
		public function nextPage():Array
		{
			return getPage(_pageIndex + 1);
		}
		
		/**
		 * 前一页。
		 *  
		 * @return 
		 * 
		 */		
		public function previousPage():Array
		{
			return getPage(_pageIndex - 1);
		}
		
		/**
		 * 第一页。
		 *  
		 * @return 
		 * 
		 */		
		public function firstPage():Array
		{
			return getPage(1);
		}
		
		/**
		 * 获得当前页的记录数据。
		 *  
		 * @return 
		 * 
		 */		
		public function currentPage():Array
		{
			return getPage(_pageIndex);
		}
		
		/**
		 * 最后一页。
		 *  
		 * @return 
		 * 
		 */		
		public function lastPage():Array
		{
			return getPage(getTotalPage());
		}
		
		/**
		 * 获得具体页的集合。
		 *  
		 * @param pageNum
		 * @return 
		 * 
		 */		
		public function getPage(value:int):Array
		{
			if (value < 1)
			{
				value = 1;
			}
			
			if (value > getTotalPage()) 
			{
				value = getTotalPage();
			} 
	
			_pageIndex = value;
			
			var startIndex:int = (value - 1) * _pageSize;
			
			return _source.slice(startIndex, startIndex + _pageSize);;
		}
		
		/**
		 * 总共多少页。
		 *  
		 * @return 
		 * 
		 */		
		public function getTotalPage():int
		{
			return int(getRecordCount() + _pageSize - 1) / _pageSize;
		}
		
		/**
		 * 当前页数。
		 *  
		 * @return 
		 * 
		 */		
		public function get pageIndex():int
		{
			return _pageIndex;
		}
		
		public function set pageIndex(value:int):void
		{
			_pageIndex = value;	
		}
		
		public function set pageSize(value:int):void
		{
			_pageSize = value;
		}
		
		public function get pageSize():int
		{
			return _pageSize;
		}
		/**
		 * 计算该数据源记录数量。
		 *  
		 * @return 
		 * 
		 */		
		public function getRecordCount():int
		{
			return _source.length;
		}
		
		/**
		 * 获得数据源引用。
		 *  
		 * @return 
		 * 
		 */		
		public function get source():Array
		{
			return _source;
		}
		
		public function set source(value:Array):void
		{
			_source = value;
		}
		
		/**
		 * 对数据源删除记录。
		 *  
		 * @param data
		 * @return 
		 * 
		 */		
		public function removeRecord(data:Object):Boolean
		{
			if (_source.indexOf(data) != -1)
			{
				_source.splice(_source.indexOf(data), 1);
				
				return true;
			}
			
			return false;
		}
		
		public function destroy():void
		{
			source = null;
		}
		
	}
}